package cn.taobaoke.restful.domain;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 代理用户. 与微信群之间是一对多关系。
 *
 * @author yangzuo
 * @since 2017-03-11
 */
@Setter
@Getter
@ToString
@Entity
@Table(name = "tb_agent")
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AgentEntity implements Serializable {

    public static final String PROXY_TYPE_CLASS1 = "class1";    // 一级代理
    public static final String PROXY_TYPE_CLASS2 = "class2";    // 二级代理

    @Id
    @GeneratedValue
    private Long id;

    @Column
    private String weChat;

    @Column
    private String name;

    @Column
    private String nickName;            // 昵称, add by luc. 2017-06-20

    @Column
    private String pid; // 阿里妈妈推广位ID

    @Column
    private String phone;

    @Column
    private String token;

    @Column
    private String type; // 一级代理, 二级代理

    @Column
    private Double perOfCommission; // 分佣比例, 自身的分佣

    @Column
    private Double class1PerOfCommission; // 二级代理的一级抽成比例

    @Column
    private Double parentPerOfCommission;      // 一级抽成

    @Column
    private Double grandParentPerOfCommission; // 二级抽成

    @Column
    private Integer level;                     // 第几层

    @Column
    private String password;

    @Column
    private Long parentId;

    // 支付宝账号
    @Column
    private String alipay;                  // 支付宝

    // 无线下线, 并限制在三级代理范围内。
    // 推广的时候,只考虑三级计算。 a -> b -> c  ( c 推广的, a的提成交一级抽成, b叫二级抽成)
    @Column
    private Long grandParentId;

    @Column
    private Date createTime;

    @Column
    private Date modifiedTime;

    @Column
    private Boolean isDelete;

    @Column
    private Long domainId;

    //    TODO 返回代理信息的时候,需要将WxGroup信息装填上. 另外,groupNames字段没有持久化到数据库中, 是组合信息。
    @Transient
    private List<String> groupNames;

    @Transient
    private AgentEntity parent;

    @Transient
    private String inviteCode;      // 注册邀请码

    @Transient
    private String shortCouponWebsite; // 优惠汇总短连接地址

    @Transient
    private String domain;
}
